package diamond.day04;

/**
 * 分析：
 * 是否是多线程问题：是。生产者线程，消费者线程
 * 是否存在线程安全问题：是。存在共享变量店员或产品
 * 如何解决线程安全问题：三种方法
 * 是否涉及线程通信问题：是。使用wait notify
 */
public class ThreadTest {
    public static void main(String[] args) {
        Product product = new Product();
        Producer producer = new Producer(product);
        Consumer consumer = new Consumer(product);
        Thread tProcducer1 = new Thread(producer);//生产者线程1
        Thread tConsumer1 = new Thread(consumer); // 消费者线程1
        tProcducer1.setName("生产者线程1");
        tConsumer1.setName("消费者线程1");
        tProcducer1.start();
        tConsumer1.start();
    }
}

/**
 * 产品
 */
class Product{
    private int number = 0; // 产品余量

    public int getNumber() {
        return number;
    }

    public void setNumber(int number) {
        this.number = number;
    }
}

/**
 * 生产者
 */
class Producer implements Runnable{
    private Product product;

    public Producer(Product product) {
        this.product = product;
    }

    public void run() {

    }
}

/**
 * 消费者
 */
class Consumer implements Runnable{
    private Product product;

    Consumer(Product product){
        this.product = product;
    }

    public synchronized void consumer(){
        // 如果还有产品，则进行消费
        if(product.getNumber()>0){
            product.setNumber(product.getNumber()-1);
        }else{
            //如果没有产品了，唤醒则停止消费
            notify();
            try {
                wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
    public void run() {

    }
}
